#ifndef _USER_SYSTEM_H_
#define _USER_SYSTEM_H_

#include <stdint.h>
#include <string.h>
#include <config.h>
#include <stdbool.h>

/**
 * @brief 硬件层任务事件
 *
 */
typedef enum
{
  HAL_REG_INIT_EVENT = 1 << 0,
} HalTaskEvent_t;


#if (defined(BLE_SNV)) && (BLE_SNV == TRUE)

/**
 * @brief 从存储器读取数据
 *
 * @param AddrOffset - 读取地址偏移
 * @param SizeOut    - 读取数据长度
 * @param pDataOut   - 输出读取的数据
 * @return uint32_t  - 操作状态
 */
extern uint32_t Lib_Read_Flash(uint32_t AddrOffset, uint32_t SizeOut, uint32_t *pDataOut);

/**
 * @brief 将数据写入到存储器中
 *
 * @param AddrOffset - 写入地址偏移
 * @param SizeIn     - 写入数据长度
 * @param pDataOut   - 待写入的数据
 * @return uint32_t  - 操作状态
 */
extern uint32_t LibraryWriteFlash(uint32_t AddrOffset, uint32_t SizeIn, uint32_t *pDataIn);
#endif

/**
 * @brief 获取内部温感采样值，如果使用了ADC中断采样，需在此函数中暂时屏蔽中断.
 *
 * @return uint16_t - 内部温感采样值.
 */
extern uint16_t HalGetInterTempValue(void);

/**
 * @brief 硬件抽象层初始化
 *
 */
void HardwareInit(void);

/**
 * @brief 蓝牙初始化
 *
 */
void BluetoothLibraryInit(void);

/**
 * @brief 获取系统上次复位原因
 *
 */
extern void GetLastResetStatus(void);

#endif
